Telegram Group Search
😮 Топ-вакансий для джавистов за неделю

Разработчик бэкенда (BDUI-платформа) — 220 000 —‍ 480 000 ₽ — гибрид (Москва)

Java-разработчикот 100 000 до 200 000 ₽ — удалёнка

Java Developer от 300 000 ₽ — удалёнка

Senior Java Developerот 4 500 до 6 000 € — гибрид (Москва)

➡️ Еще больше топовых вакансий — в нашем канале Java jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
🎮 Код из книги: Реактивная обработка REST-запросов

Проблема: При большом количестве одновременных запросов блокирующая модель ввода-вывода приводит к исчерпанию потоков и задержкам в обработке, что негативно сказывается на отклике приложения и пользовательском опыте.

Решение:
в книге Mastering Spring Boot 3.0 автор предлагает использовать Spring WebFlux — реактивный стек Spring, основанный на неблокирующей модели ввода-вывода. Это позволяет обрабатывать тысячи одновременных запросов с минимальными затратами ресурсов, обеспечивая высокую отзывчивость и масштабируемость приложения.

Пример реализации реактивного REST-контроллера с использованием Spring WebFlux:
@RestController
@RequestMapping("/api/users")
public class UserController {

private final UserService userService;

public UserController(UserService userService) {
this.userService = userService;
}

@GetMapping
public Flux<User> getAllUsers() {
return userService.getAllUsers();
}

@GetMapping("/{id}")
public Mono<ResponseEntity<User>> getUserById(@PathVariable String id) {
return userService.getUserById(id)
.map(ResponseEntity::ok)
.defaultIfEmpty(ResponseEntity.notFound().build());
}

@PostMapping
public Mono<User> createUser(@RequestBody User user) {
return userService.createUser(user);
}
}


В этом примере используются типы Flux и Mono из Project Reactor для представления потоков данных и одиночных значений соответственно. Это позволяет обрабатывать запросы и ответы асинхронно и неблокирующим образом.

Преимущества:

— Неблокирующая модель ввода-вывода позволяет эффективно использовать ресурсы при высоких нагрузках.
— Асинхронная обработка запросов обеспечивает быстрый отклик даже при большом количестве одновременных пользователей.
— Интеграция с другими реактивными библиотеками и потоками данных упрощает построение сложных бизнес-процессов.

Еще больше полезных книг — в нашем канале @progbook

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Многопоточность в Spring Boot с AI

Есть бизнес-логика, которая требует многозадачности, но нужно сделать это грамотно и без лишних усилий? ИИ поможет сэкономить время на сложных аспектах работы с потоками и синхронизацией.

📝 Промпт:

Generate a Spring Boot service that processes [описание бизнес-логики] with multithreading support. Use Java concurrency features like ExecutorService, CompletableFuture, or @Async. Ensure thread safety, synchronization, and efficient thread pool management. Explain design decisions and trade-offs.


💡 Дополнительные возможности:

— Используйте Java 17+ features, чтобы сразу писать асинхронный и многозадачный код на современном уровне
— Добавьте Add thread pool management, чтобы контролировать нагрузку и избежать перегрузок
— Добавьте Add exception handling for multithreading, чтобы предотвратить ошибки в параллельных операциях

💬 Как вы используете AI при разработке?

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🛠 20 нюансов PostgreSQL

PostgreSQL давно перестал быть просто популярной СУБД — сегодня это мощный, гибкий и инновационный инструмент, способный решать самые сложные задачи в масштабируемых приложениях.

Если вы серьезно занимаетесь бэкендом и хотите держать руку на пульсе самых важных особенностей и тонкостей PostgreSQL, то игнорировать эти нюансы нельзя:

— как правильно оптимизировать запросы и работу с индексами,
— тонкости работы с транзакциями и параллелизмом,
— новые возможности JSON и работы с данными,
— расширенные методы мониторинга и отладки,
— и многое другое, что реально сэкономит время и ресурсы вашего проекта.

🔗 Подробнее в статье

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
📊 Чек-лист: эффективная работа с коллекциями в Java

Коллекции — база для любой бизнес-логики, но неправильный выбор структуры данных или операций приводит к тормозам и ошибкам.

🔹 Выбор структуры данных

— ArrayList быстрый доступ по индексу, но медленная вставка/удаление в середине.
— LinkedList эффективен для частых вставок и удалений, но медленный случайный доступ.
— HashSet быстрая проверка наличия элемента, но не гарантирует порядок.
— LinkedHashSet сохраняет порядок вставки, но чуть медленнее.
— TreeSet упорядоченный набор, но операции дороже из-за балансировки дерева.

🔹 Оптимизация операций

— Избегайте частых автокорректировок размера у ArrayList. Инициализируйте вместимость сразу, если размер известен.
— При массовой вставке используйте addAll() вместо последовательного add().
— Для поиска и фильтрации предпочитайте потоки (Stream API).

🔹 Коллекции и многопоточность

— Для многопоточных сценариев используйте ConcurrentHashMap или CopyOnWriteArrayList.
— Помните, что Collections.synchronizedXXX() — это обертки с блокировкой, часто неэффективные для интенсивных операций.

🔹 Память и производительность

— Помните о влиянии неизменяемых коллекций: они безопасны, но могут создавать накладные расходы по памяти.
— Профилируйте приложения, чтобы определить реальные узкие места в работе с коллекциями.

🔹 Дополнительно

— Используйте Collectors.toMap() и другие мощные инструменты Stream API для удобного преобразования и агрегации данных.
— В новых версиях Java появляются оптимизации и новые структуры (например, Immutable Collections в Java 9+).

💬 Использовали LinkedList хоть раз?

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🚨 Смешные новости про IT теперь в одном канале

Мы запустили @hahacker_news — наш новый юмористический IT-канал.

Туда будем постить лучшие шутки до 19го мая, которые вы присылали на конкурс.

👉 @hahacker_news — голосование уже идёт, переходите, читайте, угарайте и оставляйте реакции
Please open Telegram to view this post
VIEW IN TELEGRAM
🎧 Что послушать — #подкаст

🔹 Javaswag #75
Дата выпуска: 4 февраля 2025
Ведущий: Дмитрий Волыхин
Гость: Илья Ильиных
Продолжительность: 2 часа 24 минуты

В этом выпуске подкаста Javaswag обсуждаются причины перехода с Java на Go, преимущества Go по сравнению с Java, а также использование редактора Vim для повышения эффективности разработки.

🔹 Ключевые темы выпуска


00:00 — Переход от Java к Go
06:13 — Проблемы с Optional и его использование
11:20 — Использование Optional в Java
18:30 — Важность форматирования кода
23:42 — Проблемы и решения в команде
31:05 — Переход на Vim и его связь с GoLang
36:30 — Проблемы с Gradle и тестами
44:51 — Проекты и архитектура микросервисов
51:03 — Сравнение Go и Java
56:13 — Погружение в Go и его особенности
01:10:36 — Мутационное тестирование и его важность
01:16:09 — Сравнение тестирования в Java и Go
01:24:44 — Принципы написания устойчивых тестов
01:31:32 — Тестирование как черный ящик
01:37:13 — Интерфейсы в Go и Java
01:43:09 — Обработка ошибок в Go и Java
01:48:18 — Теория монады и её применение в Java
01:53:35 — Проблемы написания больших проектов на Go
02:04:50 — Итераторы в Go и Lua
02:13:26 — Эффективные методы работы с кодом
02:19:12 — Непопулярные мнения о потоках в Java и Kotlin
02:24:34 — Проблемы и решения в Java и Kotlin

🔗 Слушать выпуск

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
JavaRocks - канал доказывающий что Java-рулит.

Собираем лучшие посты со всего русскоязычного телеграм + пишем свои собственные мнения, фишки и трюки языка.

- основы
- трюки и фишки языка
- тесты на проверку знаний
- паттерны проектирования на Java

Подпишись и изучай Java. Никакой воды. @javarocks

Реклама. Киренкина Марина Дмитриевна, ИНН 345702417736. Erid 2VtzqwMcqaU
Выходные загадки

Какой термин загадан?

🐸 Библиотека джависта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🆕 Java Digest: подборка материалов

🔹 OpenTelemetry и Kubernetes

Автор делится опытом миграции демо-приложения с Docker Compose на Helm в Kubernetes. Он описывает использование Helm subcharts для настройки инфраструктуры (Traefik, Jaeger, PostgreSQL) и приложений, а также демонстрирует изоляцию компонентов с помощью vCluster.

🔹 Тестирование Spring-контроллеров с MockMvcTester

Автор представляет MockMvcTester, новый инструмент в Spring Framework 6.2, который упрощает написание тестов контроллеров с использованием AssertJ-стиля. Он показывает, как интегрировать MockMvcTester в проекты на Spring Boot 3.4.0 и выше, и предоставляет примеры конфигурации для различных сценариев тестирования.

🔹
Создание надежного Docker-образа для Spring Boot-приложения

Автор рассматривает лучшие практики упаковки Spring Boot-приложений в Docker-образы. В статье обсуждаются методы диагностики сбоев, таких как OutOfMemoryError, с использованием heap dump и GC-логов, а также инструменты мониторинга, включая Spring Boot Actuator и Java Flight Recorder.

🐸 Библиотека джависта #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Java и производительность — новая тема от онлайн-конференции Podlodka Java Crew

С 26 по 30 мая вас ждет тематическая неделя, посвящённая продвинутым практикам оптимизации Java-приложений.

В программе:

— Доклад Владимира Плизги (Tibbo System) о подходах к профилированию и инструментах, которые действительно работают;

— Воркшоп по JMH от Григория Кошелева (Контур) — научитесь писать микробенчмарки правильно;

— Круглый стол с Антоном Курако (Т-Банк) и Михаилом Поливахой (Spring АйО) — сравнение Spring, Micronaut, Quarkus и Kora через призму производительности;

— Опыт команды НСПК по нагрузочному тестированию в бою — расскажет Павел Митин.

А ещё — JFR, корутины, Kubernetes и десятки инсайтов из продакшена.

🎯 Неделя для тех, кто держит перформанс под контролем.

🔗 Подключайся: podlodka.io/javacrew

По промокоду proglib получите скидку🔥
😮 Топ-вакансий для джавистов за неделю

Java / Kotlin разработчик (Software Engineer) — до 450 000 ₽ — гибрид (Москва)

Java Backend Developer — от 1 500 до 3 000 ₽/час — удаленно

Java Developer — 180 000 —‍ 300 000 ₽ — гибрид (Санкт-Петербург)

Senior Java Developer — 400 000 —‍ 450 000 ₽ — гибрид (Москва)

➡️ Еще больше топовых вакансий — в нашем канале Java jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
🎮 Код из книги: Создание маппинга для индекса в Elasticsearch

Проблема: при создании индексов в Elasticsearch важно правильно настроить маппинг, чтобы обеспечить корректное хранение и поиск данных. Неправильная настройка маппинга может привести к неправильной индексации данных, ухудшению производительности и проблемам с поисковыми запросами.

Решение: в книге Elasticsearch in Action (Second Edition) автор предлагает пример настройки маппинга для индекса с типами данных и анализаторами, чтобы гарантировать правильную индексацию.

Пример кода для создания маппинга с типами данных и настройкой анализатора:
PUT /products
{
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "standard"
},
"price": {
"type": "float"
},
"description": {
"type": "text",
"analyzer": "english"
},
"available": {
"type": "boolean"
}
}
}
}


Преимущества:


— Обеспечивает правильную индексацию данных.
— Ускоряет поиск и улучшает точность запросов.
— Позволяет гибко настроить обработку данных и анализ текстов.

Еще больше полезных книг — в нашем канале @progbook

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🎯 Как настроить Spring Security с кастомной формой логина

Безопасность — базовая вещь. Spring Security по умолчанию кидает вас в дефолтную форму логина. Но в реальности — нужна своя, кастомная.

1️⃣ Добавьте зависимость
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>


2️⃣ Создайте SecurityConfig
@Configuration
@EnableWebSecurity
public class SecurityConfig {

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/login", "/css/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.defaultSuccessUrl("/dashboard", true)
.permitAll()
)
.logout(logout -> logout
.logoutSuccessUrl("/login?logout")
);

return http.build();
}

@Bean
public UserDetailsService userDetailsService() {
var user = User.withUsername("admin")
.password("{noop}admin123") // Для простоты, без шифрования
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user);
}
}


3️⃣ Создайте кастомную HTML-форму

src/main/resources/templates/login.html (если используете Thymeleaf):
<!DOCTYPE html>
<html>
<head><title>Login</title></head>
<body>
<h2>Login</h2>
<form method="post" action="/login">
<label>Username: <input type="text" name="username" /></label><br/>
<label>Password: <input type="password" name="password" /></label><br/>
<button type="submit">Login</button>
</form>
</body>
</html>


4️⃣ Реализуете контроллер
@RestController
public class DashboardController {

@GetMapping("/dashboard")
public String dashboard() {
return "Welcome to the dashboard!";
}
}


🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/05/21 16:28:34
Back to Top
HTML Embed Code: